package errors

type ErrorCode struct {
	Code    int    `json:"code"`
	Message string `json:"message"`
}

// Error 实现error的接口  然后ErrorCode继承一下Error方法  ErrorCode就为error类型的返回值
func (e *ErrorCode) Error() string {
	return e.Message
}

// ErrorResponse 返回给前端的数据
func (e *ErrorCode) ErrorResponse() ErrorCode {
	return ErrorCode{
		Code:    e.Code,
		Message: e.Message,
	}
}

// NewErrorCode 用来自定义抛出的异常，支持调用传递
func NewErrorCode(code int, msg string) error {
	return &ErrorCode{
		Code:    code,
		Message: msg,
	}
}

// New 提供new方法，任意地方传递参数返回ErrorCode类型的数据
func New(code int, msg string) ErrorCode {
	return ErrorCode{
		Code:    code,
		Message: msg,
	}
}

// DefaultErrHandler 默认异常状态码函数，只需传递错误信息即可，默认返回code-10001
func DefaultErrHandler(message string) error {
	return &ErrorCode{
		Code:    ServerError.Code,
		Message: message,
	}
}

// ErrHandler 自定义错误返回函数 错误函数主入口
func ErrHandler(err error) interface{} {
	switch err.(type) { // 如果错误类型为ErrorCode，就返回错误类型的结构体
	case *ErrorCode:
		return err
	default:
		// 系统错误，500 错误提示
		return ErrorCode{Code: ServerError.Code, Message: err.Error()}
	}
}
